/*********************************************************************************************************
**
**                                   GJB 标准测试集
**
**                               Copyright All Rights Reserved
**
**--------------文件信息--------------------------------------------------------------------------------
**
** 文   件   名: gjb_S0101803GN_5.c
**
** 文件创建日期: 2021 年 1 月 12 日
**
** 描        述: 基本网络协议支持功能测试。编制测试用例代码，通过调
**               用TCP、UDP、IP、ICMP和ARP协议接口，验证各项协议正
**               确性，同时利用网络协议分析工具，分析网络包的正确性。
**               UDP
**
**               !!!!使用 wireshark 抓包工具进行分析查看
*********************************************************************************************************/
#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <spawn.h>
#include <wait.h>
#include <linux/types.h>
#include <errno.h>

#ifndef TEST_PC_IP
#define TEST_PC_IP "192.168.6.128"
#endif

#define IP_ADDR TEST_PC_IP

int main(int argc, char **argv)
{
    char                buf[]   = { "hello world" };
    int                 fd ;
    struct sockaddr_in  addr;

    //socket建立测试
    if ((fd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP)) < 0) {
        perror(strerror(errno));
        fprintf(stdout, "create socket error\n");
        exit(0);
        // return -1;
        // GJB_PRT_ERROR_INFO( "socket error!\n");
        // return (GJB_PRI_FAIL());
    }

    //清空接收服务器地址
    memset(&addr, 0, sizeof(addr));

    //配置接收端服务器
    addr.sin_family         = AF_INET;
    addr.sin_addr.s_addr    = inet_addr(IP_ADDR);
    addr.sin_port           = htons(8080);

	if(connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1)
		printf("connect() error!");


    //发送数据
    sendto(fd, buf, sizeof(buf), 0, (struct sockaddr *)&addr, sizeof(addr));

    //关闭socket
    close(fd);

    return (0);
}
